// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h" // 包含核心最小化头文件
#include "Misc/EnumRange.h" // 包含枚举范围工具

#include "LyraPerformanceStatTypes.generated.h" // 包含由UHT生成的头文件

//////////////////////////////////////////////////////////////////////

// 统计信息的显示方式
UENUM(BlueprintType)
enum class ELyraStatDisplayMode : uint8
{
	// 不显示此统计信息
	Hidden, // 隐藏模式

	// 以文本形式显示此统计信息
	TextOnly, // 仅文本模式

	// 以图表形式显示此统计信息
	GraphOnly, // 仅图表模式

	// 以文本和图表两种形式显示此统计信息
	TextAndGraph // 文本和图表模式
};

//////////////////////////////////////////////////////////////////////

// 可以在屏幕上显示的不同种类的统计信息
UENUM(BlueprintType)
enum class ELyraDisplayablePerformanceStat : uint8
{
	// 客户端帧率（单位：Hz）
	ClientFPS, // 客户端FPS

	// 服务器Tick速率（单位：Hz）
	ServerFPS, // 服务器FPS
	
	// 等待垂直同步或帧率限制的空闲时间（单位：秒）
	IdleTime, // 空闲时间

	// 整体帧时间（单位：秒）
	FrameTime, // 帧时间

	// 游戏线程帧时间（单位：秒）
	FrameTime_GameThread, // 游戏线程帧时间

	// 渲染线程帧时间（单位：秒）
	FrameTime_RenderThread, // 渲染线程帧时间

	// RHI线程帧时间（单位：秒）
	FrameTime_RHIThread, // RHI线程帧时间

	// 推断的GPU时间（单位：秒）
	FrameTime_GPU, // GPU帧时间

	// 网络延迟（单位：毫秒）
	Ping, // 网络延迟

	// 传入数据包丢失百分比（%）
	PacketLoss_Incoming, // 传入丢包率

	// 传出数据包丢失百分比（%）
	PacketLoss_Outgoing, // 传出丢包率

	// 上一秒接收的数据包数量
	PacketRate_Incoming, // 传入数据包速率

	// 过去一秒发送的数据包数量
	PacketRate_Outgoing, // 传出数据包速率

	// 接收的数据包的平均大小（单位：字节）
	PacketSize_Incoming, // 传入数据包平均大小

	// 发送的数据包的平均大小（单位：字节）
	PacketSize_Outgoing, // 传出数据包平均大小

	// 游戏的总延迟（单位：毫秒）
	Latency_Total, // 总延迟

	// 游戏模拟开始到驱动程序提交结束的延迟
	Latency_Game, // 游戏延迟

	// 操作系统渲染队列开始到GPU渲染结束的延迟
	Latency_Render, // 渲染延迟

	// 新的统计信息应该放在这里之上
	Count UMETA(Hidden) // 统计信息数量，元数据标记为隐藏
};

// 为 ELyraDisplayablePerformanceStat 枚举生成范围，便于迭代
ENUM_RANGE_BY_COUNT(ELyraDisplayablePerformanceStat, ELyraDisplayablePerformanceStat::Count);

//////////////////////////////////////////////////////////////////////